﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Kopytko.BoardGame
{
    public class Krol : Figura
    {
        public Krol(Color kolor, Pole pozycja)
        {
            Kolor = kolor;
            Symbol = 'K';
            Pozycja = pozycja;
        }
        public Krol(Figura pierwowzor)
        {
            Kolor = pierwowzor.GetKolor();
            Symbol = pierwowzor.Symbol;
            Pozycja = new Pole(pierwowzor.GetPozycja());
        }
        public override List<Ruch> PobierzDostepneRuchy(Plansza plansza)
        {
            if (ListaDostepnychRuchow == null)
            {
                ListaDostepnychRuchow = new List<Ruch>();
                List<Pole> Wektory = new List<Pole>();
                Wektory.Add(new Pole(1, 1));
                Wektory.Add(new Pole(-1, 1));
                Wektory.Add(new Pole(1, -1));
                Wektory.Add(new Pole(-1, -1));
                Wektory.Add(new Pole(1, 0));
                Wektory.Add(new Pole(-1, 0));
                Wektory.Add(new Pole(0, 1));
                Wektory.Add(new Pole(0, -1));
                foreach (Pole wektor in Wektory)
                {
                    Pole aktualne = this.Pozycja + wektor;
                    if (plansza.PoleDostepne(aktualne, this.Kolor))
                    {
                        ListaDostepnychRuchow.Add(new Ruch(this.Pozycja, aktualne));
                    }
                }
                if (!this.FiguraWykonalaRuch())
                {
                    int wartoscY = 7;
                    if (this.Kolor == Color.Black) wartoscY = 0;
                    Figura wieza = plansza.PobierzFigureZPola(new Pole(0, wartoscY));
                    if (wieza.GetKolor() == this.Kolor
                        && !wieza.FiguraWykonalaRuch()
                        && plansza.PobierzFigureZPola(new Pole(1, wartoscY)).JestPuste()
                        && plansza.PobierzFigureZPola(new Pole(2, wartoscY)).JestPuste()
                        && plansza.PobierzFigureZPola(new Pole(3, wartoscY)).JestPuste())
                    {
                        ListaDostepnychRuchow.Add(new Ruch(this.Pozycja, this.Pozycja - new Pole(2, 0)));
                    }
                    wieza = plansza.PobierzFigureZPola(new Pole(7, wartoscY));
                    if (wieza.GetKolor() == this.Kolor
                        && !wieza.FiguraWykonalaRuch()
                        && plansza.PobierzFigureZPola(new Pole(5, wartoscY)).JestPuste()
                        && plansza.PobierzFigureZPola(new Pole(6, wartoscY)).JestPuste())
                    {
                        ListaDostepnychRuchow.Add(new Ruch(this.Pozycja, this.Pozycja + new Pole(2, 0)));
                    }
                }
            }
            return ListaDostepnychRuchow;
        }
        public override bool JestKoniem()
        {
            return false;
        }
        public override bool JestKrolem()
        {
            return true;
        }
        public override bool JestKrolowa()
        {
            return false;
        }
        public override bool JestLaufrem()
        {
            return false;
        }
        public override bool JestPionkiem()
        {
            return false;
        }
        public override bool JestPuste()
        {
            return false;
        }
        public override bool JestWieza()
        {
            return false;
        }
    }
}
